Auth0を使ってZendeskのユーザー属性を追加してみました
コンニチハ、千葉県民です。
上記記事の続きであります。
ZendeskがSAML認証システムに求めるユーザーデータは、ユーザーの姓名とメールアドレスだけですが、
より多くのデータを追加で渡してみようと思います。
Zenデスク公式の情報によると、サポートしているユーザー属性は
追加のユーザーデータを取得する に記載されているもの
と
InCommon Federation Attributes
とのことです。
本記事では追加属性を以下に決めてZendeskに連携してみます。
organizations
: ユーザーが所属する組織の名前またはIDphone
: 文字列として指定された電話番号,role
: ユーザーのロール。end-user、agent、またはadminを設定できます,tags
: ユーザーに設定されているタグ。これらのタグは、ユーザープロフィール内にすでにタグがある場合、それらのタグを上書きします,remote_photo_url
: ユーザープロフィールに設定される写真のURLuser_field_graphic_board
: Zendesk Supportのカスタムユーザーフィールドの値
前回の記事で作成したSSO integrationによりAuth0を使用したSAMLログインできるようになっているので、 ログイン処理をカスタマイズして属性を追加してみましょう。
Auth0でSAMLの設定をカスタマイズする方法にはRulesを使用します。 ※ 執筆時点で、Actionsでは出来なそうでした(ドキュメントに記載がない)
追加属性ですが、今回はやりやすいようにuser_metadataに指定します。
Auth0ダッシュボードにログインし、ユーザーの編集画面から設定しましょう。
(user_metadataの例)
{ "organizations": [ "ロンド・ベル" ], "phone": "01203335555", "role": "admin", "tags": [ "ジェガン", "バンシィ" ], "user_field_graphic_board": "GeForce GTX 1660 SUPER VENTUS XS OC", "givenname": "亮介", "surname": "森" }
user_metadataを追加した後は、 Ruleを作成し、中身を以下のようにします
function (user, context, callback) { if(context.clientID !== '<<前回の記事で作成したSSOインテグレーションのclient id>>'){ return callback(null, user, context); } user.user_metadata = user.user_metadata || {}; const organizations = user.user_metadata.organizations.join(','); const tags = user.user_metadata.tags.join(','); user.organizations = organizations; user.tags = tags; context.samlConfiguration.mappings = { "organizations": "organizations", "phone": "user_metadata.phone", "role": "user_metadata.role", "tags": "tags", "remote_photo_url": "picture", "user_field_graphic_board": "user_metadata.user_field_graphic_board", }; return callback(null, user, context); }
※ エラーハンドリングをしていないので注意
この状態で再度Zendeskにログインすると、追加した属性でZendeskのユーザー情報が更新されます。
Before
after
どういったSAMLのやりとりがされたかは、SAML-tracerで確認できます。
Auth0のRule(NodeJS)を使って柔軟にカスタマイズできるので、別のDBに蓄積した顧客の属性なんかもZendeskに連携できます。
是非試してみてください